import pandas as pd
from pyecharts.charts import Map, Timeline
from pyecharts import options as opts

# 假设df是已经加载的DataFrame，包含'依托单位', '省份', '城市', '成立时间'列
# 这里我们使用一个示例DataFrame来模拟数据
csv_file = 'D:/Courses/SmallThree/scrapy_spider/data.csv'

# 读取CSV文件
df = pd.read_csv(csv_file, encoding='gbk')

#df['成立时间'] = pd.to_datetime(df['成立时间']).dt.year  # 将成立时间转换为年份整数

# 对数据进行分组，按'成立时间'和'省份'分组，并计算每个组的数量
grouped = df.groupby(['year', 'province']).size().reset_index(name='数量')

# 创建时间线
timeline = (
    Timeline()
    .add_schema(
        is_auto_play=True,
        is_loop_play=True,
        is_timeline_show=True,
        play_interval=1000
    )
)
# 遍历年份并创建地图
for year, year_df in grouped.groupby('year'):
    # 提取该年份的数据
    data_list = year_df[['province', '数量']].values.tolist()
    year = int(year)
    # 创建地图
    map_chart = (
        Map()
        .add("实验室数量", data_list, "china", is_map_symbol_show=False)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=f"{year}年中国地图 - 实验室数量"),
            visualmap_opts=opts.VisualMapOpts(max_=year_df['数量'].max()),  # 使用当前年份的最大值
        )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    )

    # 将地图添加到时间线
    timeline.add(map_chart, f"{year}")

# 生成HTML文件
html_file = "D:/Courses/SmallThree/scrapy_spider/china_map_timeline_with_counts.html"
timeline.render(html_file)
